﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Net;
using Microsoft.Xna.Framework.Storage;

namespace NAVE_Alice_demo
{
    class Volume
    {
        #region Atributos

        private static Texture2D textura;
        private static Vector2 posicao;
        private static Vector2 tamanho;

        private static MouseState mouseAtual;
        private static MouseState mouseAnterior;

        private enum EstadosDoBotao
        { naoselecionado, selecionado, mudo };
        private static EstadosDoBotao EstadoAtual;

        #endregion

        #region Construtor

        public Volume(Texture2D Textura, Vector2 Posicao, Vector2 Tamanho)
        {
            textura = Textura;
            posicao = Posicao;
            tamanho = Tamanho;

            mouseAtual = new MouseState();
            EstadoAtual = EstadosDoBotao.naoselecionado;
        }

        #endregion

        #region Métodos

        public static void Textura(Texture2D Textura)
        {
            textura = Textura;
        }

        public static void Update()
        {
            mouseAtual = Mouse.GetState();

            if (mouseAtual.X > (int)posicao.X && mouseAtual.Y > (int)posicao.Y && mouseAtual.X < (int)posicao.X +
                tamanho.X && mouseAtual.Y < (int)posicao.Y + tamanho.Y)
            {
                switch (EstadoAtual)
                {
                    case EstadosDoBotao.naoselecionado:
                        EstadoAtual = EstadosDoBotao.selecionado;
                        break;
                }
            }

            if (mouseAtual.X > (int)posicao.X && mouseAtual.Y > (int)posicao.Y && mouseAtual.X < (int)posicao.X +
                tamanho.X && mouseAtual.Y < (int)posicao.Y + tamanho.Y && mouseAtual.LeftButton == ButtonState.Pressed &&
                mouseAtual != mouseAnterior)
            {
                switch (EstadoAtual)
                {
                    case EstadosDoBotao.selecionado:
                        EstadoAtual = EstadosDoBotao.mudo;
                        break;
                    case EstadosDoBotao.mudo:
                        EstadoAtual = EstadosDoBotao.selecionado;
                        break;
                }
            }

            mouseAnterior = mouseAtual;
        }

        public static SpriteBatch Desenhar(SpriteBatch spritebatch)
        {
            switch (EstadoAtual)
            {
                case EstadosDoBotao.selecionado:
                    spritebatch.Draw(textura, new Rectangle((int)posicao.X - 5, (int)posicao.Y, (int)tamanho.X,
                        (int)tamanho.Y), new Rectangle(110, 20, (int)tamanho.X, (int)tamanho.Y), Color.White);
                    break;
                case EstadosDoBotao.naoselecionado:
                    spritebatch.Draw(textura, new Rectangle((int)posicao.X, (int)posicao.Y, (int)tamanho.X,
                        (int)tamanho.Y), new Rectangle(26, 20, (int)tamanho.X, (int)tamanho.Y), Color.White);
                    break;
                case EstadosDoBotao.mudo:
                    spritebatch.Draw(textura, new Rectangle((int)posicao.X - 3, (int)posicao.Y, (int)tamanho.X,
                        (int)tamanho.Y), new Rectangle(210, 20, (int)tamanho.X, (int)tamanho.Y), Color.White);
                    break;
            }

            return spritebatch;
        }

        #endregion
    }
}
